﻿
/**
    1.编印
    2.强类型
    3.真面向对象：有接口，有泛型，有枚举，有访问修饰符。（js 是假的面向对象）


    var 变量名:类型名
    类型有： number
            string
            boolean
            symbol?
            void
            null
            undefined
            Enum
            any
    好理解：
        number  string  boolean  null  undefined
    
    知识点：
          基本了类型：...
          联合类型：选择
          类型推测(隐式类型声明)：
            var a = 12; 相当于  var a:number = 12;
          数组类型：
            var arr:number[];            
          函数签名
          对象类型==》复合类型
 */
var a: number;

a = 12;

// void

var b: void; //可以声明变量类型，不过一般用于返回值

//boolean : true false

//null undefined 两者既是类型 又是值。

//enum(枚举) enumerate


enum GENDER {
    MALE,
    FEMALE
}

var sex: GENDER;
//sex = "abc"; //不能赋值
sex = GENDER.FEMALE; //只能使用枚举值

//变体变量 : any
//js 里面原本的变量 就是 变体变量 
//如： var a = 123 ; a = "any";

var a1 = 10; //类型推测，根据初始化的值推测类型，如果想改变赋值不同类型的值，那就使用 any 类型
//a1 = "12"; //这里报错

var b2: any;
b2 = 1000;
b2 = "abc";

//以下：隐式类型赋值，a3 没有定义类型，则会根据初始值推断类型。
var a3 = 12;
var a4: number = 12;



enum Week {
    SUN,
    SAT,
    FRE,
    TUS
}

var w = Week.SUN;

switch (w) {
    case Week.SUN:
        break;
    //case Week.SAT:
    //    break;
    //case Week.FRE:
    //    break;
    //case Week.TUS:
    //    break;
}

//联合类型：

var c: number | string;
c = 12;
c = "abc";
// c = false; //不能是 boolean 类型


//数组也是可以带类型的，起着 泛型(约束) 的作用。

var arr = [12, 5, 8];
//var arr: number[] = [12, 5, 8];
//arr[3] = 'abc'; //上面都装了 number， 则下面就不能装 string


var arr1 = [12, 'abc', false];
//var arr1: any[] = [12, 'abc', false];
arr1.push(55);





























